package com.itheima.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.itheima.common.DefaultException;
import com.itheima.common.Paging;
import com.itheima.dto.message.MessageDto;
import com.itheima.dto.message.MessagePageDto;
import com.itheima.entity.Message;
import com.itheima.vo.KindVo;
import com.itheima.vo.message.MessageBoardVo;
import com.itheima.vo.message.MessageSoaringVo;
import com.itheima.vo.message.MessageVo;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * @author 51585
 * @description 针对表【message】的数据库操作Service
 * @createDate 2022-10-01 22:00:51
 */
public interface MessageService extends IService<Message> {

    /**
     * 发送信息
     *
     * @param messageDto 发布信息dto
     * @throws Exception 异常
     */
    void sendMessage(MessageDto messageDto) throws Exception;

    /**
     * 分页展示信息
     *
     * @param messagePageDto 分页查看信息dto（按条件筛选）
     * @return 返回信息vo
     * @throws Exception 异常
     */
    Paging<MessageVo> pageMessage(MessagePageDto messagePageDto) throws Exception;

    /**
     * 分页展示个人信息
     *
     * @param messagePageDto 分页查看信息dto（按条件筛选）
     * @return 返回信息vo
     * @throws Exception 异常
     */
    Paging<MessageVo> pagePersonalMessage(MessagePageDto messagePageDto) throws Exception;

    /**
     * 管理员删除信息
     *
     * @param messageIds 信息id集合
     * @return 结果
     * @throws Exception 异常
     */
    String deleteMessage(List<Integer> messageIds) throws Exception;

    /**
     * 信息点赞功能
     *
     * @param messageId 信息id
     * @throws Exception 异常
     */
    void likeMessage(Integer messageId) throws Exception;

    /**
     * 信息取消点赞功能
     *
     * @param messageId 信息id
     * @throws Exception 异常
     */
    void cancelLikeMessage(Integer messageId) throws Exception;

    /**
     * 同步信息点赞数
     */
    void syncLikeMessage();

    /**
     * 查找种类
     *
     * @return 信息种类VO
     */
    List<KindVo> findKind();

    /**
     * 新增种类
     *
     * @param type 种类
     * @throws Exception 异常
     */
    void addKind(String type) throws Exception;

    /**
     * 信息点赞排行榜
     *
     * @return 信息点赞排行榜vo
     * @throws Exception 异常
     */
    List<MessageBoardVo> likeLeaderBoard() throws Exception;

    /**
     * 删除种类
     *
     * @param name 种类
     * @throws Exception 异常
     */
    void deleteKind(String name) throws Exception;

    /**
     * 信息点赞飙升榜
     *
     * @return 信息点赞飙升vo
     * @throws Exception 异常
     */
    List<MessageSoaringVo> likeSoaring() throws Exception;

    /**
     * redis信息历史点赞数更新
     */
    void refreshHistoryCount();

    /**
     * 图片/视频预览
     *
     * @param files 图片/视频文件
     * @return url
     * @throws DefaultException 异常
     */
    List<String> preview(List<MultipartFile> files) throws DefaultException;

    /**
     * 获取新闻
     * @param id 信息id
     * @return 返回信息vo
     */
    MessageVo getMessage(Integer id);
}
